/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

JCLOUD DETECTION SUBSCRIBE API
detection API

OpenAPI spec version: v2
Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/


#ifndef DetectionClient_h
#define DetectionClient_h


#import <JDCloudOCSDKCore/JDCloudOCSDKCore.h>
#import <JDCloudOCSDKDetection/DetectionApiModel.h>

@interface DetectionClient : NSObject<JDCloudClient>{
    @private
    NSString* _userAgent;
    NSString* _serviceName;
    NSString* _version;
    }

    @property (strong,readonly,nonatomic) NSString* userAgent;

    @property (strong,readonly,nonatomic) NSString* serviceName;

    @property (strong,readonly,nonatomic) NSString* version;

    @property (strong,nonatomic) NSString* contentType;

    @property (strong,nonatomic) Credential* credential;

    @property (strong,nonatomic) SDKEnvironment* sdkEnvironment;

    @property (strong,nonatomic) NSMutableDictionary* customHeader;

    @property  (strong,nonatomic) NSString* httpRequestProtocol;

    -(void) addCustomerHeaderWithKey:(NSString*) key
    value:(NSString*) value;

    -(id)initWithGlobalConfig;

    -(id)initWithCredential:(Credential*)credential
    sdkEnvironment:(SDKEnvironment*)sdkEnvironment;
    -(id)initWithCredential:(Credential*)credential;
    /**
    validateSiteMonitorAddress sync request
    @param validateSiteMonitorAddressRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `validateSiteMonitorAddressResponse` the request response data model
    */
    -(NSDictionary*) validateSiteMonitorAddressSyncWithRequest:(DetectionValidateSiteMonitorAddressRequest*) validateSiteMonitorAddressRequest;

    -(void)validateSiteMonitorAddressAsyncWithRequest:(DetectionValidateSiteMonitorAddressRequest*) validateSiteMonitorAddressRequest
    completionHandler:(void(^)(int statusCode,DetectionValidateSiteMonitorAddressResponse* _Nullable validateSiteMonitorAddressResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    testSiteMonitor sync request
    @param testSiteMonitorRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `testSiteMonitorResponse` the request response data model
    */
    -(NSDictionary*) testSiteMonitorSyncWithRequest:(DetectionTestSiteMonitorRequest*) testSiteMonitorRequest;

    -(void)testSiteMonitorAsyncWithRequest:(DetectionTestSiteMonitorRequest*) testSiteMonitorRequest
    completionHandler:(void(^)(int statusCode,DetectionTestSiteMonitorResponse* _Nullable testSiteMonitorResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createProbeTask sync request
    @param createProbeTaskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createProbeTaskResponse` the request response data model
    */
    -(NSDictionary*) createProbeTaskSyncWithRequest:(DetectionCreateProbeTaskRequest*) createProbeTaskRequest;

    -(void)createProbeTaskAsyncWithRequest:(DetectionCreateProbeTaskRequest*) createProbeTaskRequest
    completionHandler:(void(^)(int statusCode,DetectionCreateProbeTaskResponse* _Nullable createProbeTaskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    enableSiteMonitor sync request
    @param enableSiteMonitorRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `enableSiteMonitorResponse` the request response data model
    */
    -(NSDictionary*) enableSiteMonitorSyncWithRequest:(DetectionEnableSiteMonitorRequest*) enableSiteMonitorRequest;

    -(void)enableSiteMonitorAsyncWithRequest:(DetectionEnableSiteMonitorRequest*) enableSiteMonitorRequest
    completionHandler:(void(^)(int statusCode,DetectionEnableSiteMonitorResponse* _Nullable enableSiteMonitorResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updateProbeTask sync request
    @param updateProbeTaskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updateProbeTaskResponse` the request response data model
    */
    -(NSDictionary*) updateProbeTaskSyncWithRequest:(DetectionUpdateProbeTaskRequest*) updateProbeTaskRequest;

    -(void)updateProbeTaskAsyncWithRequest:(DetectionUpdateProbeTaskRequest*) updateProbeTaskRequest
    completionHandler:(void(^)(int statusCode,DetectionUpdateProbeTaskResponse* _Nullable updateProbeTaskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeProbeHistory sync request
    @param describeProbeHistoryRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeProbeHistoryResponse` the request response data model
    */
    -(NSDictionary*) describeProbeHistorySyncWithRequest:(DetectionDescribeProbeHistoryRequest*) describeProbeHistoryRequest;

    -(void)describeProbeHistoryAsyncWithRequest:(DetectionDescribeProbeHistoryRequest*) describeProbeHistoryRequest
    completionHandler:(void(^)(int statusCode,DetectionDescribeProbeHistoryResponse* _Nullable describeProbeHistoryResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteProbeTask sync request
    @param deleteProbeTaskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteProbeTaskResponse` the request response data model
    */
    -(NSDictionary*) deleteProbeTaskSyncWithRequest:(DetectionDeleteProbeTaskRequest*) deleteProbeTaskRequest;

    -(void)deleteProbeTaskAsyncWithRequest:(DetectionDeleteProbeTaskRequest*) deleteProbeTaskRequest
    completionHandler:(void(^)(int statusCode,DetectionDeleteProbeTaskResponse* _Nullable deleteProbeTaskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteSiteMonitor sync request
    @param deleteSiteMonitorRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteSiteMonitorResponse` the request response data model
    */
    -(NSDictionary*) deleteSiteMonitorSyncWithRequest:(DetectionDeleteSiteMonitorRequest*) deleteSiteMonitorRequest;

    -(void)deleteSiteMonitorAsyncWithRequest:(DetectionDeleteSiteMonitorRequest*) deleteSiteMonitorRequest
    completionHandler:(void(^)(int statusCode,DetectionDeleteSiteMonitorResponse* _Nullable deleteSiteMonitorResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    getSiteMonitorSource sync request
    @param getSiteMonitorSourceRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `getSiteMonitorSourceResponse` the request response data model
    */
    -(NSDictionary*) getSiteMonitorSourceSyncWithRequest:(DetectionGetSiteMonitorSourceRequest*) getSiteMonitorSourceRequest;

    -(void)getSiteMonitorSourceAsyncWithRequest:(DetectionGetSiteMonitorSourceRequest*) getSiteMonitorSourceRequest
    completionHandler:(void(^)(int statusCode,DetectionGetSiteMonitorSourceResponse* _Nullable getSiteMonitorSourceResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeProbeTask sync request
    @param describeProbeTaskRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeProbeTaskResponse` the request response data model
    */
    -(NSDictionary*) describeProbeTaskSyncWithRequest:(DetectionDescribeProbeTaskRequest*) describeProbeTaskRequest;

    -(void)describeProbeTaskAsyncWithRequest:(DetectionDescribeProbeTaskRequest*) describeProbeTaskRequest
    completionHandler:(void(^)(int statusCode,DetectionDescribeProbeTaskResponse* _Nullable describeProbeTaskResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAgentStatus sync request
    @param describeAgentStatusRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAgentStatusResponse` the request response data model
    */
    -(NSDictionary*) describeAgentStatusSyncWithRequest:(DetectionDescribeAgentStatusRequest*) describeAgentStatusRequest;

    -(void)describeAgentStatusAsyncWithRequest:(DetectionDescribeAgentStatusRequest*) describeAgentStatusRequest
    completionHandler:(void(^)(int statusCode,DetectionDescribeAgentStatusResponse* _Nullable describeAgentStatusResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createSiteMonitor sync request
    @param createSiteMonitorRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createSiteMonitorResponse` the request response data model
    */
    -(NSDictionary*) createSiteMonitorSyncWithRequest:(DetectionCreateSiteMonitorRequest*) createSiteMonitorRequest;

    -(void)createSiteMonitorAsyncWithRequest:(DetectionCreateSiteMonitorRequest*) createSiteMonitorRequest
    completionHandler:(void(^)(int statusCode,DetectionCreateSiteMonitorResponse* _Nullable createSiteMonitorResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    discribeProbes sync request
    @param discribeProbesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `discribeProbesResponse` the request response data model
    */
    -(NSDictionary*) discribeProbesSyncWithRequest:(DetectionDiscribeProbesRequest*) discribeProbesRequest;

    -(void)discribeProbesAsyncWithRequest:(DetectionDiscribeProbesRequest*) discribeProbesRequest
    completionHandler:(void(^)(int statusCode,DetectionDiscribeProbesResponse* _Nullable discribeProbesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeMetricDataAm sync request
    @param describeMetricDataAmRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeMetricDataAmResponse` the request response data model
    */
    -(NSDictionary*) describeMetricDataAmSyncWithRequest:(DetectionDescribeMetricDataAmRequest*) describeMetricDataAmRequest;

    -(void)describeMetricDataAmAsyncWithRequest:(DetectionDescribeMetricDataAmRequest*) describeMetricDataAmRequest
    completionHandler:(void(^)(int statusCode,DetectionDescribeMetricDataAmResponse* _Nullable describeMetricDataAmResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    getSiteMonitor sync request
    @param getSiteMonitorRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `getSiteMonitorResponse` the request response data model
    */
    -(NSDictionary*) getSiteMonitorSyncWithRequest:(DetectionGetSiteMonitorRequest*) getSiteMonitorRequest;

    -(void)getSiteMonitorAsyncWithRequest:(DetectionGetSiteMonitorRequest*) getSiteMonitorRequest
    completionHandler:(void(^)(int statusCode,DetectionGetSiteMonitorResponse* _Nullable getSiteMonitorResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    probeTaskEnable sync request
    @param probeTaskEnableRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `probeTaskEnableResponse` the request response data model
    */
    -(NSDictionary*) probeTaskEnableSyncWithRequest:(DetectionProbeTaskEnableRequest*) probeTaskEnableRequest;

    -(void)probeTaskEnableAsyncWithRequest:(DetectionProbeTaskEnableRequest*) probeTaskEnableRequest
    completionHandler:(void(^)(int statusCode,DetectionProbeTaskEnableResponse* _Nullable probeTaskEnableResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updateSiteMonitor sync request
    @param updateSiteMonitorRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updateSiteMonitorResponse` the request response data model
    */
    -(NSDictionary*) updateSiteMonitorSyncWithRequest:(DetectionUpdateSiteMonitorRequest*) updateSiteMonitorRequest;

    -(void)updateSiteMonitorAsyncWithRequest:(DetectionUpdateSiteMonitorRequest*) updateSiteMonitorRequest
    completionHandler:(void(^)(int statusCode,DetectionUpdateSiteMonitorResponse* _Nullable updateSiteMonitorResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    getSiteMonitorDataPoints sync request
    @param getSiteMonitorDataPointsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `getSiteMonitorDataPointsResponse` the request response data model
    */
    -(NSDictionary*) getSiteMonitorDataPointsSyncWithRequest:(DetectionGetSiteMonitorDataPointsRequest*) getSiteMonitorDataPointsRequest;

    -(void)getSiteMonitorDataPointsAsyncWithRequest:(DetectionGetSiteMonitorDataPointsRequest*) getSiteMonitorDataPointsRequest
    completionHandler:(void(^)(int statusCode,DetectionGetSiteMonitorDataPointsResponse* _Nullable getSiteMonitorDataPointsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeProbeTasks sync request
    @param describeProbeTasksRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeProbeTasksResponse` the request response data model
    */
    -(NSDictionary*) describeProbeTasksSyncWithRequest:(DetectionDescribeProbeTasksRequest*) describeProbeTasksRequest;

    -(void)describeProbeTasksAsyncWithRequest:(DetectionDescribeProbeTasksRequest*) describeProbeTasksRequest
    completionHandler:(void(^)(int statusCode,DetectionDescribeProbeTasksResponse* _Nullable describeProbeTasksResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    /**
    detection common sync request
    @param  jdcloudDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
    */
    -(NSDictionary*) detectionCommonSyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                           url:(NSString*) url
                                        method:(NSString*) method;

    -(void)detectionCommonAsyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                  url:(NSString*) url
                               method:(NSString*) method
                    completionHandler:(void(^)(int statusCode, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    @end


    #endif /* DetectionClient_h */
